// 导入 NestJS 核心模块中的 Injectable 和 NestMiddleware 装饰器
import { Injectable, NestMiddleware } from '@nestjs/common';
// 导入 Express 中的请求、响应和中间件函数类型
import { Request, Response, NextFunction } from 'express';

// 标记该类为可注入的服务，以便 NestJS 能将其注入到其他模块中
@Injectable()
// 定义一个日志中间件类，实现 NestMiddleware 接口
export class LoggerMiddleware implements NestMiddleware {
  // 实现中间件的 use 方法，当请求进入时会调用该方法
  use(req: Request, res: Response, next: NextFunction) {
    // 记录请求信息，包括请求方法和原始 URL
    console.log(`Request received: ${req.method} ${req.originalUrl}`);
    // 监听响应完成事件，当响应发送完成后记录状态码
    res.on('finish', () => {
      console.log(`Response sent: ${res.statusCode}`);
    });
    // 调用 next 函数，将请求传递给下一个中间件或路由处理器
    next();
  }
}